import js from '@eslint/js'
import tsEslint from 'typescript-eslint'
import eslintPluginVue from 'eslint-plugin-vue'
import prettierRecommended from 'eslint-plugin-prettier/recommended'
import globals from 'globals'

import { readFile } from 'node:fs/promises'

// unplugin-auto-import 自动生成的 eslint 规则文件是 json 格式，不能直接导入，需要手动读取
const autoImportFile = new URL('./.eslintrc-auto-import.json', import.meta.url)
const autoImportGlobals = JSON.parse(await readFile(autoImportFile, 'utf8'))

export default tsEslint.config(
  /* 全局 Ignore */
  {
    ignores: ['node_modules', 'dist', 'public']
  },
  /* 全局 变量声明 规则 */
  {
    languageOptions: {
      globals: {
        ...globals.browser, // 浏览器变量 (window, document 等)
        ...globals.node, // Node.js 变量 (process, require 等)
        ...autoImportGlobals.globals, // auto-import 导入的变量
        OptionType: true
      }
    },
    linterOptions: {
      reportUnusedDisableDirectives: 'off' // 报告未使用的禁用指令
    }
  },
  /* 插件和配置推荐 */
  js.configs.recommended,
  ...tsEslint.configs.recommended,
  ...eslintPluginVue.configs['flat/recommended'], // Vue3 推荐配置
  prettierRecommended, // 使用 prettier 规则

  /* 全局 规则 */
  {
    rules: {
      'no-var': 'error', // 禁止使用 var
      'no-useless-escape': 'off' // 禁止使用转义字符
      // 'no-unused-vars': [
      //   'warn',
      //   // 允许未使用的变量，以 _ 开头的变量不检查
      //   {
      //     argsIgnorePattern: '^_',
      //     varsIgnorePattern: '^_'
      //   }
      // ]
    }
  },

  /* 自定义 prettier 规则 */
  {
    rules: {
      'prettier/prettier': [
        'error',
        {
          endOfLine: 'auto' // 自动识别换行符
        }
      ]
    }
  },

  /* 自定义 Vue 规则 */
  {
    files: ['*.vue', '**/*.vue'],
    languageOptions: {
      parserOptions: {
        parser: tsEslint.parser,
        ecmaVersion: 'latest',
        sourceType: 'module'
      }
    },
    rules: {
      'vue/multi-word-component-names': 'off' // 要求组件名称始终为 “-” 链接的单词
    }
  },

  /* 自定义 TypeScript 规则 */
  {
    files: ['**/*.{cjs,mjs,ts,tsx,vue}'],
    rules: {
      '@typescript-eslint/ban-ts-comment': 'off', // 禁止使用 ts-ignore 注释
      '@typescript-eslint/no-empty-interface': 'off', // 禁止空接口
      '@typescript-eslint/no-empty-object-type': 'off', // 禁止空对象类型
      '@typescript-eslint/no-explicit-any': 'off', // 禁止使用 any 类型
      '@typescript-eslint/no-unused-expressions': 'off', // 禁止未使用的表达式
      '@typescript-eslint/no-require-imports': 'off', // 禁止使用 require()
      '@typescript-eslint/no-unsafe-function-type': 'off'
      // '@typescript-eslint/no-unused-vars': 'off'
    }
  }
)
